package com.nuanshui.heatedloan.userinfo.test;

import com.alibaba.dubbo.config.annotation.Reference;
import com.nuanshui.framework.security.MD5Util;
import com.nuanshui.heatedloan.dal.IdTypeHandler;
import com.nuanshui.heatedloan.userinfo.model.User;
import com.nuanshui.heatedloan.constant.GlobalParam;
import com.nuanshui.heatedloan.userinfo.facade.UserQueryService;
import com.nuanshui.heatedloan.userinfo.facade.UserService;
import com.nuanshui.heatedloan.userinfo.model.UserInfo;
import org.apache.poi.hssf.record.formula.functions.True;
import org.junit.Assert;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by dutay on 2017/7/3.
 */
@Component
public class UserServiceTest1 implements InitializingBean {
    @Reference(url = GlobalParam.USER_DUBBO_SERVER, timeout = GlobalParam.DUBBO_SERVER_TIME_OUT,version = GlobalParam.USER_DUBBO_SERVER_VERSION)
    private UserService userService;
    @Override
    public void afterPropertiesSet() throws Exception {
        //insertTest();
        /*deleteTest();
        registerTest();
        //changePwdTest(); //这个不能一起运行
        updateUserInfoTest();
        isRegisteredTest();
        // emptyUserPasswordTest();//不测试
        loginByPhoneTest();
        findAllUserCountTest();
        getUserIdsTest();
        */
    }
    void getUserIdsTest(){
        List<String> list1  = userService.getUserIds("测试1");
        Assert.assertNotNull(list1);
        // 通过昵称获取id了，断言不报错说明有这个用户，报错的话就是不存在这个昵称的用户了。
    }
    void findAllUserCountTest(){
        long i;
        i = userService.findAllUserCount();
        Assert.assertTrue(i>0l);
        System.out.println("________________________________________________i= "+ i);
    }
    void loginByPhoneTest(){
        User a = userService.loginByPhone("18655608547","123456");
        Assert.assertNotNull(a);
        /* 1 ，登录时的密码，不需要MD5转码，直接输入密码就好了
           2 ，如果手机号存在，但是密码错我，代码会有一个输出，“用户名或密码错误!”
           3 ，如果手机号不存在，断点的结果是a=null
           4，错误情况已经测试通过了。
        */
    }
    void isRegisteredTest(){
        Boolean flag=userService.isRegistered("12234567890");
        Assert.assertTrue(flag == false);
        //把断言改成ture, 断言报错，说明用户不存在。
        //这个是判断用户是否已经注册
    }
    void updateUserInfoTest(){
        User user = new User();
        user.setId(IdTypeHandler.encode(362));
        user.setNick("测试1");
        Assert.assertTrue(userService.updateUserInfo(user,true)==true);
        // 这句话注释的话，是不会更新昵称的。
        //这里我有疑问，明明昵称不能成功，我再次运行，为什么不报错呢。
    }
    void changePwdTest(){
        Boolean a = userService.isRegistered("18655608547");
        if (a == true) {
            Boolean b;
            b = userService.changePwd("123456", "123456", IdTypeHandler.encode(356));
            // 这里会自己报错误，新密码和旧密码一样，请重新上传，
            //那这里我就不能一起运行了，怎么处理
        }
       // 更改用户密码。
    }
    void registerTest(){
        Boolean a = userService.isRegistered("18255350000");
        if (a == false) {
            User user1 = userService.register("18255350000", IdTypeHandler.encode(123456));
            Boolean b = userService.isRegistered("18255350000");
            Assert.assertTrue(b == true);
            // 这里断言改成false，也可以说明的注册成功。
            System.out.println("成功注册，断言不报错");
        }
        //根据手机号码和密码注册。
    }
    void deleteTest(){
        Boolean a = userService.isRegistered("18668111587");
        if (a == true) {
            int i = userService.delete(IdTypeHandler.encode(331));
        }
        /* 1，这个数据库未删除，更改achive的状态。状态1，表示已删除，0表示用户正常。
           2，如果把用户的achive改为1，表示已经删除，但是调用isRegistered方法，认为该用户不存在，然后调用insert
              方法，插入一个用户，插入不成功报错，说手机号码不能重复。
           3，暂时用别的id，明天再问！
         */
    }
    void insertTest() {

        User user=userService.register("10011",MD5Util.md5("123456").toLowerCase());

        userService.changePwd(null,MD5Util.md5("123456").toLowerCase(),user.getId());

//       Boolean i = userService.isRegistered("18912345678");
//            if (i == false){
//            User u = new User();
//            u.setNick("小胡");
//            u.setPhone("18912345678");
//            u.setPassword(MD5Util.md5("123456"));
//            u.setArchive(true);
//            u.setSex(2);
//            u.setAuth(1l);
//            u.setLoginname("18912345678");
//            userService.insert(u);
//            Boolean j = userService.isRegistered("18912345678");
//            Assert.assertTrue(j == true);
//            System.out.println("成功插入数据，断言不报错，继续走下去。");
//            // 这里也可以Assert.assertTrue(j == false);报错的话，也可以说明我数据插入成功了。
//        }
         /*
         1，insert的时候，Password直接传123456，插入不成功
         2.密码是MD5值加密啊，MD5Util.md5("123456"）
         结果：数据库user表插入一条数据，成功注册一个用户。
         */
    }
    void emptyUserPasswordTest(){
        userService.emptyUserPassword("18255355698","1");
        // 清空某个用户的密码,这个code没做，不用测试。
    }
}
